#include <stdio.h>
#include <string.h>
#include <errno.h>


//读一个字符
// #include <string.h>
// #include <errno.h>
// int main()
// {
//     FILE* fp = fopen("test.txt","r");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         return 1;
//     }
//     //读
//     //...

//     fclose(fp);//类似于free函数
//     fp = NULL;
//     return 0;
// }




// //写文件
// int main()
// {
//     FILE* fp = fopen("test.txt","w");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         return 1;
//     }
//     //写文件
//     char i = 0;
//     for(i = 'a';i <= 'z';i++)
//     {
//         fputc(i,fp);
//     }
//     //关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }


// //读文件
// int main()
// {
//     FILE* fp = fopen("test.txt","r");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         return 1;
//     }
//     //读文件
//     char ch = 0;
//     while((ch = fgetc(fp)) != EOF)
//     {
//         printf("%c ",ch);
//     }
//     //关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }



// //写一行数据
// int main()
// {
//     FILE* fp = fopen("test.txt","w");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         return 1;
//     }
//     //写一行数据
//     fputs("hello world\n",fp);
//     fputs("hello world\n",fp);
//     //关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }



// //读一行数据
// int main()
// {
//     FILE* fp = fopen("test.txt","r");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         //也可用perror("fopen") 括号内是自己添加的内容
//         return 1;
//     }
//     //读一行数据
//     char arr[20];
//     fgets(arr,5,fp);
//     printf("%s\n",arr);
//     //关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }



// //格式化输出到文件
// struct S
// {
//     char name[20];
//     int age;
//     float score;
// };
// int main()
// {
//     struct S s = {"zhangsan",25,98.5f};
//     FILE* fp = fopen("test.txt","w");
//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     fprintf(fp,"%s %d %f",s.name,s.age,s.score);
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }




// //格式化输入
// struct S
// {
//     char name[20];
//     int age;
//     float score;
// };
// int main()
// {
//     struct S s = {0};
//     FILE* fp = fopen("test.txt","r");
//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     fscanf(fp,"%s %d %f",s.name,&(s.age),&(s.score));
//     printf("%s %d %f\n",s.name,s.age,s.score);
//     fprintf(stdout,"%s %d %f\n",s.name,s.age,s.score);//6666666
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }



//二进制写入到文件
// struct S
// {
//     char name[20];
//     int age;
//     float score;
// };

//写入
// int main()
// {
//     struct S s = {"zhangsan",25,98.5f};
//     FILE* fp = fopen("test.txt","wb");
//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     fwrite(&s,sizeof(struct S),1,fp);//二进制形式写入 肉眼看不懂
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }


// //读取
// int main()
// {
//     struct S s = {0};
//     FILE* fp = fopen("test.txt","rb");
//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     fread(&s,sizeof(struct S),1,fp);
//     printf("%s %d %f\n",s.name,s.age,s.score);
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }




// //sscanf与sprintf
// struct S
// {
//     char name[20];
//     int age;
//     float score;
// };
// int main()
// {
//     struct S s = {"zhangsan",25,98.5f};
//     struct S tmp = { 0 };
//     char buf[30] = { 0 };
//     sprintf(buf,"%s %d %f",s.name,s.age,s.score);//格式化的数据放入字符串
//     printf("%s\n",buf);
//     sscanf(buf,"%s %d %f",tmp.name,&tmp.age,&tmp.score);//将字符串转换成格式化的数据
//     printf("%s %d %f",tmp.name,tmp.age,tmp.score);
//     return 0;
// }



// //随机读写
// //fseek与ftell


// int main()
// {
//     FILE* fp = fopen("example.txt","r");
//     if(fp == NULL)
//     {
//         printf("%s\n",strerror(errno));
//         return 1;
//     }

//     fseek(fp,2,SEEK_SET);//定位文件指针
//     int ch = fgetc(fp);//取字符还是要用fget
//     printf("%c\n",ch);
//     printf("%d\n",ftell(fp));//注意 读取完字符c后自动后移指向d了

//     fseek(fp,-1,SEEK_END);
//     ch = fgetc(fp);
//     printf("%c\n",ch);
//     printf("%d\n",ftell(fp));

//     rewind(fp);
//     ch = fgetc(fp);//a
//     printf("%c\n",ch);

//     fclose(fp);
//     fp = NULL;
//     return 0;
// }




//文本与二进制
int main()
{
    int a = 10000;
    FILE *pf = fopen("binarytest.txt", "wb");
    fwrite(&a, 4, 1, pf); // 二进制的形式写到文件中
    fclose(pf);
    pf = NULL;
    return 0;
}
